<!doctype html>
<html>
<head>
    <title>CodeMirror: sTeX mode</title>
    <link rel="stylesheet" href="../../lib/codemirror.css">
    <script src="../../lib/codemirror.js"></script>
    <script src="stex.js"></script>
    <link rel="stylesheet" href="../../test/mode_test.css">
    <script src="../../test/mode_test.js"></script>
    <link rel="stylesheet" href="../../doc/docs.css">
</head>
<body>
<h1>Tests for the sTeX Mode</h1>

<h2>Basics</h2>
<script language="javascript">
    MT = ModeTest;

    MT.test('foo',
            null, 'foo');

    MT.test('foo bar',
            null, 'foo',
            null, ' bar');
</script>

<h2>Tags</h2>
<script language="javascript">
    MT.test('\\begin{document}\n\\end{document}',
            'tag', '\\begin',
            'bracket', '{',
            'atom', 'document',
            'bracket', '}',
            'tag', '\\end',
            'bracket', '{',
            'atom', 'document',
            'bracket', '}');

    MT.test('\\begin{equation}\n  E=mc^2\n\\end{equation}',
            'tag', '\\begin',
            'bracket', '{',
            'atom', 'equation',
            'bracket', '}',
            null, ' ',
            null, ' ',
            null, 'E',
            null, '=mc',
            null, '^2',
            'tag', '\\end',
            'bracket', '{',
            'atom', 'equation',
            'bracket', '}');

    MT.test('\\begin{module}[]',
            'tag', '\\begin',
            'bracket', '{',
            'atom', 'module',
            'bracket', '}',
            'bracket', '[',
            'bracket', ']');

    MT.test('\\begin{module}[id=bbt-size]',
            'tag', '\\begin',
            'bracket', '{',
            'atom', 'module',
            'bracket', '}',
            'bracket', '[',
            null, 'id',
            null, '=bbt-size',
            'bracket', ']');

    MT.test('\\importmodule[b-b-t]{b-b-t}',
            'tag', '\\importmodule',
            'bracket', '[',
            'string', 'b-b-t',
            'bracket', ']',
            'bracket', '{',
            'builtin', 'b-b-t',
            'bracket', '}');

    MT.test('\\importmodule[\\KWARCslides{dmath/en/cardinality}]{card}',
            'tag', '\\importmodule',
            'bracket', '[',
            'tag', '\\KWARCslides',
            'bracket', '{',
            'string', 'dmath',
            'string', '/en',
            'string', '/cardinality',
            'bracket', '}',
            'bracket', ']',
            'bracket', '{',
            'builtin', 'card',
            'bracket', '}');

    MT.test('\\PSforPDF[1]{#1}', // could treat #1 specially
            'tag', '\\PSforPDF',
            'bracket', '[',
            'atom', '1',
            'bracket', ']',
            'bracket', '{',
            null, '#1',
            'bracket', '}');
</script>

<h2>Comments</h2>
<script language="javascript">
    MT.test('% foo',
            'comment', '%',
            'comment', ' foo');

    MT.test('\\item% bar',
            'tag', '\\item',
            'comment', '%',
            'comment', ' bar');

    MT.test(' % \\item',
            null, ' ',
            'comment', '%',
            'comment', ' \\item');

    MT.test('%\nfoo',
            'comment', '%',
            null, 'foo');
</script>

<h2>Errors</h2>
<script language="javascript">
    MT.test('\\begin}{',
            'tag', '\\begin',
            'error', '}',
            'bracket', '{');

    MT.test('\\item]{',
            'tag', '\\item',
            'error', ']',
            'bracket', '{');

    MT.test('% }',
            'comment', '%',
            'comment', ' }');
</script>

<h2>Character Escapes</h2>
<script language="javascript">
    MT.test('the \\# key',
            null, 'the',
            null, ' ',
            'tag', '\\#',
            null, ' key');

    MT.test('a \\$5 stetson',
            null, 'a',
            null, ' ',
            'tag', '\\$',
            'atom', 5,
            null, ' stetson');

    MT.test('100\\% beef',
            'atom', '100',
            'tag', '\\%',
            null, ' beef');

    MT.test('L \\& N',
            null, 'L',
            null, ' ',
            'tag', '\\&',
            null, ' N');

    MT.test('foo\\_bar',
            null, 'foo',
            'tag', '\\_',
            null, 'bar');

    MT.test('\\emph{\\{}',
            'tag', '\\emph',
            'bracket', '{',
            'tag', '\\{',
            'bracket', '}');

    MT.test('\\emph{\\}}',
            'tag', '\\emph',
            'bracket', '{',
            'tag', '\\}',
            'bracket', '}');

    MT.test('section \\S1',
            null, 'section',
            null, ' ',
            'tag', '\\S',
            'atom', '1');

    MT.test('para \\P2',
            null, 'para',
            null, ' ',
            'tag', '\\P',
            'atom', '2');

</script>

<h2>Spacing control</h2>

<script language="javascript">
    MT.test('x\\,y', // thinspace
            null, 'x',
            'tag', '\\,',
            null, 'y');

    MT.test('x\\;y', // thickspace
            null, 'x',
            'tag', '\\;',
            null, 'y');

    MT.test('x\\!y', // negative thinspace
            null, 'x',
            'tag', '\\!',
            null, 'y');

    MT.test('J.\\ L.\\ is', // period not ending a sentence
            null, 'J',
            null, '.',
            null, '\\',
            null, ' L',
            null, '.',
            null, '\\',
            null, ' is'); // maybe could be better

    MT.test('X\\@. The', // period ending a sentence
            null, 'X',
            'tag', '\\@',
            null, '.',
            null, ' The');

    MT.test('{\\em If\\/} I', // italic correction
            'bracket', '{',
            'tag', '\\em',
            null, ' ',
            null, 'If',
            'tag', '\\/',
            'bracket', '}',
            null, ' ',
            null, 'I');

</script>

<h2>Summary</h2>
<script language="javascript">
    MT.printSummary();
</script>

</body>
</html>

